\section{Google Chrome}
\label{sec:Google_Chrome}
Der Source Code des Google Chrome Browsers basiert grössenteils auf dem von Google unter dem Namen ">Chromium"< zur Verfügung gestellten Open Source Projekt. Neben dem Chrome Browser existieren auch weitere, unbekanntere Browser, die auf dem Chromium-Kern basieren.

\subsection{Architektur}
\label{subsec:Chrome_Architektur}
Die Architektur des Chrome Browser ist modular aufgebaut und benutzt die \gls{layout_engine} ">WebKit"<. Jeder Tab und jede Erweiterung im Chrome Browser läuft in einem eigenen Systemprozess. Der Chrome Browser besitzt mit der ">V8"< eine der schnellsten \glspl{javascript_engine}. 

\subsection{Erweiterungsmöglichkeiten}
\label{subsec:Chrome_Erweiterungsmoeglichkeiten}

Bei Chrome Erweiterungen handelt es um komprimierte Archive, die hauptsächlich aus \acrshort{html}"=, \acrshort{css}"= und JavaScript"=Dateien bestehen. Der Chrome Browser stellt mit der ">chrome.*"< ein JavaScript \acrshort{api} (\acrlong{api}) zur Verfügung über die eine Erweiterung auf browserspezifische Funktionen zugreifen kann.
Da jede Erweiterung in einem eigenen Prozess ausgeführt wird, unterliegt das Erweiterungskonzept klaren Restriktionen. \autoref{fig:chrome_architecture} und die nachfolgende Auflistung erläutern das Konzept und die Funktionsweise von Chrome Erweiterungen und die Interaktion einzelner Komponenten.

\begin{figure}[H]
   \centering
   \includegraphics[width=0.8\textwidth]{images/chrome_architecture}
   \caption[Google Chrome Erweiterungskonzept]{Übersicht über das Erweiterungskonzept des Google Chrome Browsers (angelehnt an \cite[]{google2011_chrome_overview})}
   \label{fig:chrome_architecture}
\end{figure}

Eine Chrome Erweiterung setzt sich hauptsächlich aus einer oder mehreren der nachfolgenden Komponenten zusammen:

\begin{itemize}
  \item{\textbf{\textit{Manifest-Datei:}} Die Manifest-Datei \verb|manifest.json| beinhaltet grundlegende Informationen über die Erweiterung, wie wichtigsten Dateien, Zugriffsrechte und die Art der Erweiterung. Jede Chrome Erweiterung benötigt zwingend eine Manifest-Datei.}
  \item{\textbf{\textit{Background Page:}} Bei der Background Page handelt es sich um eine unsichtbare \acrshort{html}"=Seite (typischerweise \verb|background.html| genannt), die im Hintergrund in einem eigenen Prozess des Browsers ausgeführt wird. Es existiert genau eine Instanz der Background Page, die während der gesamten Laufzeit der Erweiterung aktiv ist. Die Background Page hat vollen Zugriff auf die ">chrome.*"< \acrshort{api} und kann über Message Passing mit Content Scripts kommunizieren.}
  \item{\textbf{\textit{\acrshort{ui} Pages (\acrlong{ui}):}} Erweiterung können gewöhnliche \acrshort{html}"=Seiten enthalten, die eine grafische Benutzerschnittstelle der Erweiterung repräsentieren. Dies können Options Pages, Seiten zur Verwaltung und Darstellung von Erweiterungs-Einstellungen oder Popup Pages sein. \acrshort{ui} Pages können mit der Background Page und untereinander kommunizieren.}
  \item{\textbf{\textit{Content Scripts:}} Content Scripts sind JavaScript"=Dateien die im Kontext der aktuell geladenen Webseite ausgeführt werden. Sie haben vollen Zugriff auf das \gls{_dom} der geladenen Webseite und können dieses beliebig manipulieren. Content Scripts haben einen limitierten Zugriff auf die ">chrome.*"< \acrshort{api} und unterliegen der \gls{same_orgin_policy}. Durch Message Passing können \verb|XMLHttpRequest| und \acrshort{api}"=Methoden via Background Page ausgeführt werden.
  Da Content Scripts in einer speziellen Umgebung, genannt ">isolated world"<, ausgeführt werden, haben Content Scripts keine Zugriff auf JavaScript"=Variablen und "=Methoden, die von der aktuell geladenen Webseite definiert wurden. }
\end{itemize}

\subsection{Vor- und Nachteile}
\label{subsec:Chrome_Vor-und_Nachteile}
Ein grosser Vorteil des Google Chrome Erweiterungskonzepts ist, dass Entwickler beim entwickeln von Erweiterungen nicht die gesamte Architektur des Browser kennen müssen. Da Chrome Erweiterung auf den  gängigen Webtechnologien wie \acrshort{html}, \acrshort{css} und JavaScript basieren, kann jeder Webentwickler ohne grossen Initialaufwand Erweiterungen für den Google Chrome entwickeln. Die \acrshort{api} ist klar strukturiert und verfügt über eine ausserordentlich umfangreiche Dokumention mit Tutorials und Beispielen. Auf Limitierungen der \acrshort{api} wird in der Dokumentation verständlich hingewiesen. Chrome Erweiterungen unterstützen das Einbinden von beliebigen JavaScript"=Libraries, wie z. B. JQuery. Zudem wir auch der \acrshort{npapi}"=Standard (\acrlong{npapi}) unterstützt, um proprietären Code als Plugin einzubinden. Erweiterungen lassen sich sehr komfortable über das im Chrome integriere Entwicklertool debuggen.

Im Vergleich zu anderen Browsern ist der Funktionsumfang von Chrome Erweiterungen limitierter. Da jede Erweiterung in einem eigenen Systemprozess ausgeführt wird, kann die Performance des Browsers und des Systems bei vielen installierten Erweiterungen beeinträchtigt werden.



